package org.example2;

/**
 * 通过此例,可以验证 Bpresenter中的go方法,是冗余的,虽然通过ctrl + 左键 ,可以来回跳,但是整个过程中,却是没有被调用.
 * 通过本例也看到lambda和匿名内部类中的this的区别
 * 匿名内部类的this就是指向当前匿名内部类
 * lambda中的this不是lambda自己.是包裹lambda表达式的对象
 */
public class AppRun {
    public static void main(String[] args) {
        new AppRun().doSomeThings();

    }

    public void doSomeThings() {
        new Apresenter().go(
                new HasWidgets() {
                    @Override
                    public String print() {
                        System.out.println("----------匿名类,HasWidgets类中的print方法执行了----------this.getClass:" + this.getClass().getName());
                        return " 匿名内部类HasWidgets print返回值 ";
                    }
                }
        );

        Apresenter apresenter = new Apresenter();
        apresenter.go(() -> {
            System.out.println("----------匿名类,HasWidgets类中的print方法执行了----------this.getClass:" + this.getClass().getName());
            return "Lambda形式HasWidgets print返回值";
        });

//        System.out.println(apresenter.hashCode());

        new Bpresenter().sayB("jimmy");

        /**
         * 当下面这段代码注释掉, 可以看出整个项目中就没有调用Bpresenter类中的go 方法
         * 此时 Bpresenter类的go 方法就是可冗余的方法.
         *
         * * */
//        new Bpresenter().go(new HasWidgets() {
//            @Override
//            public String print() {
//                return " Main1 HasWidgets print返回值222";
//            }
//
//
//            public void myOwnMethod() {
//                System.out.println("myOwnMethod方法执行了");
//            }
//        });
    }


}
